package com.crissy.userService.controller;


import com.crissy.userService.common.Result;
import com.crissy.userService.entity.User;
import com.crissy.userService.entity.dto.UserDTO;
import com.crissy.userService.service.IUserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author Crissy-月下闲人
 * @since 2023-11-10
 */
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private IUserService userService;

    /**
     * 跳转初始化页面的处理方法。
     *
     * @param token 从请求头中获取的Token，用于身份验证。
     * @return 返回一个结果对象，包含用户信息或错误信息。如果token有效，则返回用户信息；否则，返回身份验证失败的错误信息。
     */
    @GetMapping("toInit")
    public Result<UserDTO> toInit(@RequestHeader("Token") String token) {
        // 校验token是否为空或无效
        if (token == null || token.equals("")) {
            return Result.fail(403, "身份验证失败！");
        }
        // 调用userService的toInit方法处理token
        return userService.toInit(token);
    }


    /**
     * 登录接口
     * POST请求
     * 参数：用户对象
     * 返回：登录结果
     */
    @PostMapping("/toLogin")
    public Result<UserDTO> toLogin(@RequestBody User user) {
        return userService.toLogin(user);
    }


    /**
     * 退出登录接口
     *
     * @return 退出登录结果
     */
    @GetMapping("/toLogout")
    public Result<String> toLogout(@RequestHeader("Token") String token) {
        if (token == null || token.equals("")) {
            return Result.fail(403, "身份验证失败！");
        }
        return userService.toLogout(token);
    }


    /**
     * 注册用户
     * 请求路径：/toRegister
     * 请求方法：POST
     * 参数：
     * - user: 用户信息
     * 返回值：Result<UserInfo>
     */
    @PostMapping("/toRegister")
    public Result<UserDTO> toRegister(@RequestBody User user) {
        return userService.toRegister(user);
    }

    /**
     * 根据token删除用户信息
     *
     * @param token 用户的token
     * @return 删除用户信息的结果
     */
    @GetMapping("/toDelete")
    public Result<UserDTO> toDelete(@RequestHeader("Token") String token) {
        if (token == null || token.equals("")) {
            return Result.fail(403, "身份验证失败！");
        }
        return userService.toDelete(token);
    }

}
